<div id="maincontent">

<h1>ECMAScript 对象应用</h1>

<div id="tpn">

</div>


<div id="intro">
<p><strong>对象的创建和销毁都在 JavaScript 执行过程中发生，理解这种范式的含义对理解整个语言至关重要。</strong></p>
</div>


<div>
<h2>声明和实例化</h2>

<p>对象的创建方式是用关键字 new 后面跟上实例化的类的名字：</p>

<pre>
var oObject = new Object();
var oStringObject = new String();
</pre>

<p>第一行代码创建了 Object 类的一个实例，并把它存储到变量 oObject 中。第二行代码创建了 String 类的一个实例，把它存储在变量 oStringObject 中。如果构造函数无参数，括号则不是必需的。因此可以采用下面的形式重写上面的两行代码：</p>

<pre>
var oObject = new Object;
var oStringObject = new String;
</pre>
</div>


<div>
<h2>对象引用</h2>

<p>在前面的章节中，我们介绍了<a href="/js/pro_js_referencetypes.asp" title="ECMAScript 引用类型">引用类型的概念</a>。在 ECMAScript 中，不能访问对象的物理表示，只能访问对象的引用。每次创建对象，存储在变量中的都是该对象的引用，而不是对象本身。</p>
</div>


<div>
<h2>对象废除</h2>

<p>ECMAScript 拥有无用存储单元收集程序（garbage collection routine），意味着不必专门销毁对象来释放内存。当再没有对对象的引用时，称该对象被废除（dereference）了。运行无用存储单元收集程序时，所有废除的对象都被销毁。每当函数执行完它的代码，无用存储单元收集程序都会运行，释放所有的局部变量，还有在一些其他不可预知的情况下，无用存储单元收集程序也会运行。</p>

<p>把对象的所有引用都设置为 null，可以强制性地废除对象。例如：</p>

<pre>
var oObject = new Object;
<span>// do something with the object here</span>
oObject = null;
</pre>

<p>当变量 oObject 设置为 null 后，对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时，该对象将被销毁。</p>

<p>每用完一个对象后，就将其废除，来释放内存，这是个好习惯。这样还确保不再使用已经不能访问的对象，从而防止程序设计错误的出现。此外，旧的浏览器（如 	IE/MAC）没有全面的无用存储单元收集程序，所以在卸载页面时，对象可能不能被正确销毁。废除对象和它的所有特性是确保内存使用正确的最好方法。</p>

<p class="important"><span>注意：</span>废除对象的所有引用时要当心。如果一个对象有两个或更多引用，则要正确废除该对象，必须将其所有引用都设置为 null。</p>
</div>


<div>
<h2>早绑定和晚绑定</h2>

<p>所谓绑定（binding），即把对象的接口与对象实例结合在一起的方法。</p>

<p>早绑定（early binding）是指在实例化对象之前定义它的属性和方法，这样编译器或解释程序就能够提前转换机器代码。在 Java 和 Visual Basic 这样的语言中，有了早绑定，就可以在开发环境中使用 IntelliSense（即给开发者提供对象中属性和方法列表的功能）。ECMAScript 不是强类型语言，所以不支持早绑定。</p>

<p>另一方面，晚绑定（late binding）指的是编译器或解释程序在运行前，不知道对象的类型。使用晚绑定，无需检查对象的类型，只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作，而无任何惩罚。</p>
</div>


<div id="bpn">

</div>




</div>
